package classes;

import java.io.*;
import java.util.ArrayList;
import java.util.List;

public class RegistryObjects {

    private List<EstateObject> objects = new ArrayList<>();

    // Добавить объект
    public void addObject(EstateObject object) {
        objects.add(object);
    }

    // Показать все объекты
    public void showAllObjects() {
        for (EstateObject object : objects) {
            System.out.printf("%s: стоимость = %.2f, налог = %.2f%n",
                    object.getClass().getSimpleName(), object.cost, object.calculateTax());
        }
    }

    // Показать объекты конкретного класса
    public void showObjectsByClass(Class<?> some_class) {
        for (EstateObject object : objects) {
            if (some_class.isInstance(object)) {
                System.out.printf("%s: стоимость = %.2f, налог = %.2f%n",
                        object.getClass().getSimpleName(), object.cost, object.calculateTax());
            }
        }
    }

    // Сохранение в файл
    public void saveInFile(String nameFile) {
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(nameFile))) {
            for (EstateObject object : objects) {
                String line = object.getClass().getSimpleName() + "," + object.cost;
                writer.write(line);
                writer.newLine();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // Загрузить из файла
    public void uploadFromFile(String nameFile) {
        try (BufferedReader reader = new BufferedReader(new FileReader(nameFile))) {
            String line;
            objects.clear(); // Очищаем текущий список объектов
            while ((line = reader.readLine()) != null) {
                String[] data = line.split(",");
                String type = data[0];
                double cost = Double.parseDouble(data[1]);

                switch (type) {
                    case "LandPlot":
                        objects.add(new LandPlot(cost));
                        System.out.println("INFO: Данные загружены из файла.");
                        break;
                    case "PrivateHome":
                        objects.add(new PrivateHome(cost));
                        System.out.println("INFO: Данные загружены из файла.");
                        break;
                    case "Flat":
                        objects.add(new Flat(cost));
                        System.out.println("INFO: Данные загружены из файла.");
                        break;
                    default:
                        System.out.println("Неизвестный тип объекта: " + type);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}